// pages/patientCard/index.js
const app = getApp()
let {
  baseUrl,
  commonUpdate,
  commonUpload
} = app.globalData
import {
  areaList
} from '../../miniprogram_npm/@vant/area-data/area.js';
import {
  ApiCardPictureIdentify,
  ApiGetCaptchaCode,
  ApiAddPatient,

} from '../../api/index'
Page({

  /**
   * 页面的初始数据
   */
  data: {
    baseUrl,
    countdown: 0,
    showpopup: false,
    areaList,
    relationArr: ['家人'],
    cardTypeArr: ['居民身份证'],
    nationArr: ['汉族', '回族'],
    opt: {
      card_type: '居民身份证',
      area: '湖北省-荆门市-京山市'
    },
    checked: true
  },
  onChangeSwitch({
    detail
  }) {
    this.setData({
      checked: detail
    })
  },

  privacyAgreement(e) {
    let path = baseUrl + '/' + e.currentTarget.dataset.v + '.pdf'
    wx.showLoading({
      title: '加载中...',
      success: () => {
        wx.downloadFile({
          url: path,
          success: (res) => {
            const filePath = res.tempFilePath
            wx.hideLoading()
            this.openView(filePath)
          },
          fail: () => {
            wx.showToast({
              title: '文件下载失败！',
              icon: "error"
            })
          }
        })
      }
    })
  },
  privacyAgreement1(e) {
    let path = baseUrl + '/' + e.currentTarget.dataset.v + '.pdf'
    wx.showLoading({
      title: '加载中...',
      success: () => {
        wx.downloadFile({
          url: path,
          success: (res) => {
            const filePath = res.tempFilePath
            wx.hideLoading()
            this.openView(filePath)
          },
          fail: () => {
            wx.showToast({
              title: '文件下载失败！',
              icon: "error"
            })
          }
        })
      }
    })
  },

  openView(path) {
    wx.openDocument({
      filePath: path,
      success: function (res) {

      },
      fail: () => {
        wx.showToast({
          title: '文件打开失败！',
          icon: "error"
        })
      }
    })
  },
  rules(val, message) {
    if (!/^1[3456789]\d{9}$/.test(val)) {
      wx.showToast({
        title: `请输入正确的${message}`,
        icon: 'none'
      });
      return false;
    } else {
      return true
    }
  },
  //获取验证码
  getCaptchaCode() {
    if (this.rules(this.data.opt.phone, '手机号')) {
      ApiGetCaptchaCode({
        phone: this.data.opt.phone
      }).then(res => {
        this.setData({
          countdown: 60,
        }, () => {
          this.getCountdown()
        })
      })
    }

  },

  getCountdown() {
    this.timer = setInterval(_ => {
      const countdown = this.data.countdown - 1
      if (countdown < 1) {
        clearInterval(this.timer)
        this.timer = null
      }
      this.setData({
        countdown
      })
    }, 1000)
  },




  //地址确认
  confirmBtn(v) {
    console.log(v)
    let type = v.currentTarget.dataset.v
    let val = ""
    if (type == 'area') {
      val = v.detail.values
      let value = (val[0].name + "-" + val[1].name + "-" + val[2].name)
      this.setData({
        [`opt.${type}`]: value,
        'showpopup': false
      })
    } else {
      val = v.detail.value
      this.setData({
        [`opt.${type}`]: val,
        'showpopup': false
      })
    }
    console.log(this.data.opt)
  },
  cancelBtn() {
    this.setData({
      'showpopup': false
    })
  },
  onChange(e) {
    let that = this
    const type = e.currentTarget.dataset.type
    const value = e.detail
    if (type == "card_no" && this.data.opt.relation == '本人') {
      wx.showModal({
        title: '本人只支持拍证件识别信息',
        content: '',
        complete: (res) => {
          if (res.confirm) {
            that.handlePhotoClick()
          }
        }
      })
      return
    }
    this.setData({
      [`opt.${type}`]: value
    })

  },

  onChangeSqure(e) {
    this.setData({
      active: !this.data.active
    })
  },
  //身份证拍照
  handlePhotoClick() {
    this.setData({
      showUploadImage: true
    })
  },
  //拿到身份证
  getUploadImage(e) {
    ApiCardPictureIdentify({
      path: e.detail.value
    }).then(res => {
      this.setData({
        'opt.card_no': res.data.card_no,
        'opt.name': res.data.name,
        'opt.nation': res.data.nation,
      })
    })
  },

  validatePhone(phone) {
    // 国内手机号规则：1开头，第二位3-9，后9位数字，共11位
    const regExp = /^1[3-9]\d{9}$/;
    // 去除可能存在的空格
    const trimmedPhone = (phone || '').trim();
    return regExp.test(trimmedPhone);
  },

  validateIdCard(idCard) {
    // 去除空格
    idCard = idCard.trim();

    // 1. 检查长度
    if (idCard.length !== 18) {
      return {
        valid: false,
        message: '身份证号码必须是18位'
      };
    }

    // 2. 检查格式（前17位为数字，最后一位可以是数字或X/x）
    const reg = /^[1-9]\d{5}(19|20)\d{2}(0[1-9]|1[0-2])(0[1-9]|[12]\d|3[01])\d{3}[\dXx]$/;
    if (!reg.test(idCard)) {
      return {
        valid: false,
        message: '身份证号码格式不正确'
      };
    }

    // 3. 验证校验码
    // 加权因子
    const factors = [7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2];
    // 校验码对应值
    const checkCodeMap = ['1', '0', 'X', '9', '8', '7', '6', '5', '4', '3', '2'];

    let sum = 0;
    for (let i = 0; i < 17; i++) {
      sum += parseInt(idCard.charAt(i)) * factors[i];
    }

    // 计算校验码
    const checkCodeIndex = sum % 11;
    const checkCode = checkCodeMap[checkCodeIndex];

    // 最后一位可能是X（不区分大小写）
    if (checkCode.toUpperCase() !== idCard.charAt(17).toUpperCase()) {
      return {
        valid: false,
        message: '身份证校验码错误'
      };
    }

    // 4. 提取并验证出生日期
    const year = parseInt(idCard.substring(6, 10));
    const month = parseInt(idCard.substring(10, 12));
    const day = parseInt(idCard.substring(12, 14));

    const date = new Date(year, month - 1, day);
    if (date.getFullYear() !== year || date.getMonth() + 1 !== month || date.getDate() !== day) {
      return {
        valid: false,
        message: '身份证中的出生日期无效'
      };
    }

    // 5. 提取地区码（简单验证，完整验证需要地区码数据库）
    const areaCode = parseInt(idCard.substring(0, 6));
    if (areaCode < 100000 || areaCode > 999999) {
      return {
        valid: false,
        message: '身份证地区码无效'
      };
    }

    // 所有验证通过
    return {
      valid: true,
      message: '身份证号码有效',
      info: {
        areaCode: areaCode,
        birthDate: `${year}-${String(month).padStart(2, '0')}-${String(day).padStart(2, '0')}`,
        gender: parseInt(idCard.charAt(16)) % 2 === 1 ? '男' : '女'
      }
    };
  },
  //保存就诊卡
  addPatientCard() {
    if (this.data.active) {
      if (!this.validatePhone(this.data.opt.phone)) {
        wx.showToast({
          title: '手机号不正确',
          icon: 'error'
        })
        return
      }
      ApiAddPatient(this.data.opt).then(res => {
        if (res.code == '200') {
          wx.showToast({
            title: "保存成功",
          })
          setTimeout(() => {
            wx.navigateBack()
          }, 500);

        }
      })
    } else {
      wx.showModal({
        title: "请阅读并勾选服务协议！",
        icon: 'error',
        showCancel: false
      })
    }

  },

  getDetailArea(e) {
    if (this.data.type != '1') {
      this.setData({
        showpopup: true,
        showpopupType: e.currentTarget.dataset.v
      })
    }
  },


  /**
   * 生命周期函数--监听页面加载
   */
  onLoad(options) {
    if (options.type && options.type == '1') {
      this.setData({
        'opt.relation': '本人',
        'type': options.type
      })
    }
  },

  /**
   * 生命周期函数--监听页面初次渲染完成
   */
  onReady() {

  },

  /**
   * 生命周期函数--监听页面显示
   */
  onShow() {
    if (!wx.getStorageSync('token')) {
      wx.showModal({
        title: "身份过期，请重新登录",
        showCancel: false,
        complete: (res) => {
          if (res.confirm) {
            wx.reLaunch({
              url: '/pages/login/index',
            })
          }
        }
      })
    }
  },

  /**
   * 生命周期函数--监听页面隐藏
   */
  onHide() {

  },

  /**
   * 生命周期函数--监听页面卸载
   */
  onUnload() {

  },

  /**
   * 页面相关事件处理函数--监听用户下拉动作
   */
  onPullDownRefresh() {

  },

  /**
   * 页面上拉触底事件的处理函数
   */
  onReachBottom() {

  },

  /**
   * 用户点击右上角分享
   */
  onShareAppMessage() {

  }
})